package com.jh.paymentchannel.helipay.service;

import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;

import com.jh.paymentchannel.helipay.util.HeliPayBase;
import com.jh.paymentchannel.util.Util;

import cn.jh.common.utils.CommonConstants;
import net.sf.json.JSONObject;

@Controller
@EnableAutoConfiguration
public class Test {
	@Autowired
	private Util util;
	
	private static final Logger log = LoggerFactory.getLogger(Test.class);
	private String merchant_no = "C1800001108";
	@RequestMapping(method=RequestMethod.POST,value="/v1.0/paymentchannel/pay/test")
	public @ResponseBody void CreditTest() {
		/*获取开始到结束的五分钟时间段[01:00~06:00)*/
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		String start = sdf.format(date);
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(date.getTime()+360000);
		String end = sdf.format(calendar.getTime());
		/*根据执行时间查询任务*/
		RestTemplate restTemplate=new RestTemplate();
		URI uri = util.getServiceUrl("paymentchannel", "error url request!");
		String url = uri.toString() + "/v1.0/paymentchannel/automaticrepaymenttask/find";
		MultiValueMap<String, String> requestEntity  = new LinkedMultiValueMap<String, String>();
		requestEntity.add("start", start);
		requestEntity.add("end", end);
		String result = restTemplate.postForObject(url, requestEntity, String.class);
		log.info("接口/v1.0/transactionclear/payment/query/ordercode--RESULT================"+result);
		JSONObject jsonObject =  JSONObject.fromObject(result);
		List<JSONObject> list  =  null;
		if(jsonObject.containsKey("result")) {
			list  =  (List)jsonObject.get("result");
		}else {
			//return null;
		}
		
		for(int i=0;i<list.size();i++){
			JSONObject art = list.get(i);
			String P5_orderId = art.getString("orderCode");
			String P3_userId = art.getString("userId");
			String P4_bindId = art.getString("bindId");
			String P8_orderAmount = art.getString("realAmount");
			String amount = art.getString("amount");
			String status = art.getString("status");
			if("1".equals(status))
				continue;
			/*根据bindid查询用户到账卡号、手机号*/
			uri = util.getServiceUrl("paymentchannel", "error url request!");
			url = uri.toString() + "/v1.0/paymentchannel/hlregister/findbycard";
			requestEntity  = new LinkedMultiValueMap<String, String>();
			requestEntity.add("bindId", P4_bindId);
			result = restTemplate.postForObject(url, requestEntity, String.class);
			log.info("接口/v1.0/paymentchannel/hlregister/findbycard--RESULT================"+result);
			jsonObject =  JSONObject.fromObject(result);
			String bankCard = null;
			String phone = null;
			if(jsonObject.containsKey("result")) {
				JSONObject jobj = jsonObject.getJSONObject("result");
				bankCard = jobj.getString("bankCard");
				phone = jobj.getString("phone");
			}else {
				//return null;
			}
			/*根据userid查询用户贴牌*/
			uri = util.getServiceUrl("user", "error url request!");
			url = uri.toString() + "/v1.0/user/find/by/userid";
			requestEntity  = new LinkedMultiValueMap<String, String>();
			requestEntity.add("userId", P3_userId);
			result = restTemplate.postForObject(url, requestEntity, String.class);
			log.info("接口/v1.0/user/find/by/userid--RESULT================"+result);
			jsonObject =  JSONObject.fromObject(result);
			String brandId = null;
			if(jsonObject.containsKey("result")) {
				JSONObject jobj = jsonObject.getJSONObject("result");
				brandId = jobj.getString("brandId");
			}else {
				//return null;
			}
			
			uri = util.getServiceUrl("facade", "error url request!");
			url = uri.toString() + "/v1.0/facade/topup";
			requestEntity  = new LinkedMultiValueMap<String, String>();
			requestEntity.add("phone", phone);
			requestEntity.add("amount", amount);
			requestEntity.add("channe_tag", "HL_PAY");
			requestEntity.add("order_desc", "信用卡还款任务");
			requestEntity.add("brand_id", brandId);
			requestEntity.add("bank_card", bankCard);
			log.info("接口/v1.0/facade/topup--参数================"+requestEntity);
			result = restTemplate.postForObject(url, requestEntity, String.class);
			log.info("接口/v1.0/facade/topup--RESULT================"+result);
			jsonObject =  JSONObject.fromObject(result);
			if(CommonConstants.SUCCESS.equals(jsonObject.get("resp_code"))) {
				uri = util.getServiceUrl("paymentchannel", "error url request!");
				url = uri.toString() + "/v1.0/paymentchannel/automaticrepaymenttask/update";
				requestEntity  = new LinkedMultiValueMap<String, String>();
				requestEntity.add("orderCode", P5_orderId);
				requestEntity.add("status", "3");//充值成功
				result = restTemplate.postForObject(url, requestEntity, String.class);
				log.info("接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"+result);
			}else {
				uri = util.getServiceUrl("paymentchannel", "error url request!");
				url = uri.toString() + "/v1.0/paymentchannel/automaticrepaymenttask/update";
				requestEntity  = new LinkedMultiValueMap<String, String>();
				requestEntity.add("orderCode", P5_orderId);
				requestEntity.add("status", "5");//充值失败
				result = restTemplate.postForObject(url, requestEntity, String.class);
				log.info("接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"+result);
				//return null;
			}
			uri = util.getServiceUrl("paymentchannel", "error url request!");
			url = uri.toString() + "/v1.0/paymentchannel/pay/creditcardpayment";
			requestEntity  = new LinkedMultiValueMap<String, String>();
			requestEntity.add("channe_tag", "");
			requestEntity.add("order_desc", "");
			requestEntity.add("brand_id", brandId);
			requestEntity.add("cardNo", bankCard);
			requestEntity.add("phone", phone);
			requestEntity.add("orderCode", P5_orderId);
			requestEntity.add("userid", P3_userId);
			requestEntity.add("amount", P8_orderAmount);
			result = restTemplate.postForObject(url, requestEntity, String.class);
			log.info("接口/v1.0/paymentchannel/pay/creditcardpayment--RESULT================"+result);
			jsonObject =  JSONObject.fromObject(result);
			if("交易成功".equals(jsonObject.getString("message"))) {
				uri = util.getServiceUrl("paymentchannel", "error url request!");
				url = uri.toString() + "/v1.0/paymentchannel/pay/creditcardpayment";
				requestEntity  = new LinkedMultiValueMap<String, String>();
				requestEntity.add("P1_bizType", "TransferQuery");
				requestEntity.add("P2_orderId", P5_orderId);
				requestEntity.add("P3_customerNumber", HeliPayBase.MERCHANT_NO);
				result = restTemplate.postForObject(url, requestEntity, String.class);
				jsonObject =  JSONObject.fromObject(result);
				if("订单查询成功".equals(jsonObject.getString("message"))) {
					JSONObject jsonObj = jsonObject.getJSONObject("json");
					if("00".equals(jsonObj.getString("rt2_retCode"))) {
						if(jsonObj.containsKey("rt7_orderStatus")) {
							if("INIT".equalsIgnoreCase(jsonObj.getString("rt7_orderStatus"))
							||"DOING".equalsIgnoreCase(jsonObj.getString("rt7_orderStatus"))
							||"SUCCESS".equalsIgnoreCase(jsonObj.getString("rt7_orderStatus"))) {
								uri = util.getServiceUrl("paymentchannel", "error url request!");
								url = uri.toString() + "/v1.0/paymentchannel/automaticrepaymenttask/update";
								requestEntity  = new LinkedMultiValueMap<String, String>();
								requestEntity.add("orderCode", P5_orderId);
								requestEntity.add("status", "1");
								result = restTemplate.postForObject(url, requestEntity, String.class);
								log.info("接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"+result);
							}
						}
					}else {
						if(jsonObj.containsKey("rt7_orderStatus")) {
							if("REFUND".equalsIgnoreCase(jsonObj.getString("rt7_orderStatus"))) {
								uri = util.getServiceUrl("paymentchannel", "error url request!");
								url = uri.toString() + "/v1.0/paymentchannel/automaticrepaymenttask/update";
								requestEntity  = new LinkedMultiValueMap<String, String>();
								requestEntity.add("orderCode", P5_orderId);
								requestEntity.add("status", "4");//退款
								result = restTemplate.postForObject(url, requestEntity, String.class);
								log.info("接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"+result);
							}
							if("FAIL".equalsIgnoreCase(jsonObj.getString("rt7_orderStatus"))) {
								uri = util.getServiceUrl("paymentchannel", "error url request!");
								url = uri.toString() + "/v1.0/paymentchannel/automaticrepaymenttask/update";
								requestEntity  = new LinkedMultiValueMap<String, String>();
								requestEntity.add("orderCode", P5_orderId);
								requestEntity.add("status", "2");//失败
								result = restTemplate.postForObject(url, requestEntity, String.class);
								log.info("接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"+result);
							}
						}
					}
				}
			}
		}
	}
}
